package com.hyt.model.cloudefile.enums;

import lombok.Getter;
import org.apache.commons.lang3.StringUtils;

import java.util.Arrays;
import java.util.Collections;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;

/**
 * 文件类型枚举，定义六位，前两位为系统id， SystemEnum定义
 *
 * @author huangwu
 */
@Getter
public enum FileTypeEnum {


    KW_GOV_BATCH_GENERATE_ADMISSION_TICKET("430001", "政企考务批量生成准考证", SystemEnum.KWGOV),
    KW_GOV_BATCH_DOWNLOAD_ADMISSION_TICKET("430002", "政企考务批量下载准考证", SystemEnum.KWGOV),
    YKCJ("520001", "成绩系统成绩导入", SystemEnum.YKCJ),
    PJ_PROJECT_ALL_ZIP("510001", "中小版项目所有文件数据包zip", SystemEnum.PJ),
    PJ_PROJECT_OBJECTIVE_SCORE("510002", "中小版项目考生客观题成绩", SystemEnum.PJ),
    PJ_DBK_PROJECT_ALL_ZIP("510003", "大考版项目所有文件数据包zip", SystemEnum.PJ),
    PJ_DBK_PROJECT_OBJECTIVE_SCORE("510004", "大考版项目考生客观题成绩", SystemEnum.PJ),
    TK_PAPER_ZIP("520005", "题库试卷导出", SystemEnum.TK),
    KW_PAPER_ZIP("520006", "考务试卷导出", SystemEnum.KW),
    KW_ANSWER_PAPER_ZIP("520007", "考生答卷导出", SystemEnum.KW),

    ;
    /**
     * 文件类型
     */
    private final String fileType;
    /**
     * 描述信息
     */
    private final String fileTypeDesc;

    /**
     * 所属系统
     */
    private final SystemEnum systemEnum;

    FileTypeEnum(String fileType, String fileTypeDesc, SystemEnum systemEnum) {
        this.fileType = fileType;
        this.fileTypeDesc = fileTypeDesc;
        this.systemEnum = systemEnum;
    }

    public static FileTypeEnum getFileTypeEnumByFileType(String fileType) {
        if (StringUtils.isEmpty(fileType)) {
            return null;
        }
        for (FileTypeEnum fileTypeEnum : FileTypeEnum.values()) {
            if (fileTypeEnum.getFileType().equals(fileType)) {
                return fileTypeEnum;
            }
        }
        return null;
    }

    public String getFileType() {
        return fileType;
    }

    public String getFileTypeDesc() {
        return fileTypeDesc;
    }

    public SystemEnum getSystemEnum() {
        return systemEnum;
    }

    public static Set<FileTypeEnum> listFileTypeBySystem(String systemCode) {
        final SystemEnum systemEnumByType = SystemEnum.getSystemEnumByType(systemCode);
        if (Objects.isNull(systemEnumByType)) {
            return Collections.emptySet();
        } else {
            return Arrays.stream(FileTypeEnum.values()).filter(fileTypeEnum -> Objects.equals(fileTypeEnum.getSystemEnum(), systemEnumByType)).collect(Collectors.toSet());
        }
    }

    public static boolean contains(String fileType) {
        return Arrays.stream(FileTypeEnum.values()).anyMatch(fileTypeEnum -> Objects.equals(fileType, fileTypeEnum.getFileType()));
    }
}
